package com.itheima.demo3udp2;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;

public class ChatClass {
    public int offset;
    public
    ChatClass(int offset) {
        this.offset = offset;
    }
    public void send(int port) throws Exception {
        System.out.println("我是客户端，我要发数据给服务器");
//        目标：目标：完成UDP通信一发一收客户端开发
//        1、创建发送端对象（代表抛韭菜的人）随机分配一个端口作为出口
        DatagramSocket socket = new DatagramSocket();
        Scanner sc = new Scanner(System.in);
        while (true) {
//        2、创建数据包对象，封装要发送的数据(韭菜盘子)
            System.out.println("请输入要发送的数据：");
            String msg = sc.nextLine();
            if ("exit".equals(msg)) {
                System.out.println("程序退出");
                socket.close();
                break;
            }
            byte[] buf = msg.getBytes();
            DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(),port+offset);
            socket.send(packet);
        }
    }
    public void receive(int port_receive) throws Exception {
        System.out.println("服务器端启动....");
//        目标：完成UDP通信一发一收服务器端开发
//        1、创建接收端对象，注册端口（接韭菜的人）
        DatagramSocket socket = new DatagramSocket(port_receive);
//        2、创建数据包对象，接收数据（韭菜盘子）
        byte[] buf = new byte[1024*64];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);

        while (true) {
//        3、接受数据，将数据封装到数据包对象中
            socket.receive(packet);
//        4、看看数据是否收到了
//        获取收到数据长度
            String data=new String(buf, 0, packet.getLength());
            System.out.println(data);
            //        获取对方的IP对象和程序端口
            String ip=packet.getAddress().getHostAddress();
            int port=packet.getPort();
            System.out.println(ip+":"+port);
        }
    }
}
